package com.ihg.hiex.admin.service.session;

import java.util.List;
import java.util.Map;

import com.ihg.hiex.admin.entity.upload.OnlineReport;
import com.ihg.hiex.entity.session.Session;
import com.ihg.hiex.entity.session.after.SessionReport;
import com.ihg.hiex.entity.session.during.SessionCalibration;
import com.ihg.hiex.entity.session.during.report.SessionReportWriting;
import com.ihg.hiex.entity.user.Delegate;

/**
 * 
 * @author dan
 *
 */
public interface SessionReportService {
    
    /**
     * 
     * @param session
     * @return
     */
    public Map<String, SessionReport> list(Session session);
    
    /**
     * 
     * @param session
     * @param reportName
     * @return
     */
    public List<SessionReport> list(Session session, String reportName);
    
    /**
     * 
     * @param session
     * @param statusName
     * @return
     */
    public List<SessionReport> listBySendStatus(Session session, String statusName);
    
    /**
     * 
     * @param sessionCalibration
     * @return
     */
    public SessionReportWriting loadReportWriting(SessionCalibration sessionCalibration);
    
    /**
     * 
     * @param sessionCalibrations
     * @return
     */
    public Map<String, SessionReportWriting> listReportWriting(List<SessionCalibration> sessionCalibrations);
    
    /**
     * @param session
     * @param delegate
     * @return
     */
    public SessionReport load(Session session, Delegate delegate);
    
    /**
     * 
     * @param delegate
     * @return
     */
    public SessionReport load(Delegate delegate);
    
    /**
     * 
     * @param session
     * @param onlineReports
     * @param operator
     */
    public void reportUpload(Session session, List<OnlineReport> onlineReports, Long operator);
    
    /**
     * 
     * @param session
     * @param delegate
     * @param reportUrl
     * @param reportType
     * @param operator
     */
    public void reportUpload(Session session, Delegate delegate, String reportUrl, String reportType, Long operator);
    
    /**
     * 
     * @param session
     * @param waveData
     * @param swiftData
     */
    public void dataUpload(Session session, String waveData, String swiftData);
    
    /**
     * 
     * @param sessionReport
     * @param pplReport
     */
    public void pplFinalReport(SessionReport sessionReport, String pplReport);
    
    /**
     * 
     * @param sessionReport
     * @param managerReport
     */
    public void managerFinalReport(SessionReport sessionReport, String managerReport);
    
    /**
     * 
     * @param sessionReport
     * @param delegateReport
     */
    public void delegateFinalReport(SessionReport sessionReport, String delegateReport);
    
    /**
     * 
     * @param sessionReports
     */
    public void batchPplFinalReport(List<SessionReport> sessionReports);
    
    /**
     * 
     * @param sessionReports
     */
    public void batchManagerFinalReport(List<SessionReport> sessionReports);
    
    /**
     * 
     * @param sessionReports
     */
    public void batchDelegateFinalReport(List<SessionReport> sessionReports);
    
    /**
     * @param sessionReport
     */
    public void sendDelegateReport(SessionReport sessionReport);
    
    /**
     * @param sessionReport
     */
    public void sendManagerReport(SessionReport sessionReport);
    
    /**
     * 
     * @param sessionReports
     */
    public void batchSendDelegateReport(List<SessionReport> sessionReports);
    
    /**
     * 
     * @param sessionReports
     */
    public void batchSendManagerReport(List<SessionReport> sessionReports);

}
